const fs = require("fs");
const moment = require("moment");

module.exports = function (tempPath) {
    return {
        /**
         * 模板
         */
        template: function (name) {
            let temp = fs.readFileSync(tempPath + name + '.handlebars', "utf8");
            temp = '<script id="' + name + '-template" type="text/x-handlebars-template">' + temp + '</script>';
            return temp;
        },

        /**
         * 字典
         */
        dict: function (dicts, type, name) {
            return dicts.value(type, name);
        },

        /**
         * 字典颜色
         */
        dict_color: function (dicts, type, value) {
            let dict = dicts.data(type, value);
            return dict && dict.color;
        },

        /**
         * 判断两个值是否相等
         */
        if_eq: function (a, b, options) {
            if (a == b)
                return options.fn(this);
            else
                return options.inverse(this);
        },

        /**
         * 是否包含
         */
        if_has: function (a, b, options) {
            if (b.indexOf(a) != -1)
                return options.fn(this);
            else
                return options.inverse(this);
        },

        /**
         * 是否包含
         */
        time_over: function (a, b, options) {
            if (new Date().getTime() - moment(a).toDate().getTime() > 1000 * 60 * b)
                return options.fn(this);
            else
                return options.inverse(this);
        },

        /**
         * 格式化金额
         */
        format_price: function (price) {
            return price.toFixed(2);
        },

        /**
         * 格式化金额
         */
        format_number: function (number) {
            return parseFloat(number);
        },

        /**
         * 格式化成整数
         */
        format_integer: function (number) {
            return parseInt(number) || 0;
        },

        /**
         * 序号
         */
        inc: function (value) {
            return parseInt(value) + 1;
        },

        /**
         * 格式化成 json 字符串
         */
        json: function (data) {
            return JSON.stringify(data);
        },

        /**
         * 乘
         */
        multiply: function (a, b) {
            return ((a || 0) * (b || 0)).toFixed(2);
        },

        /**
         * 加
         */
        plus: function (a, b) {
            return ((a || 0) + (b || 0)).toFixed(2);
        },

        /**
         * 减
         */
        minus: function (a, b) {
            return ((a || 0) - (b || 0)).toFixed(2);
        },

        /**
         * 或
         */
        or: function (a, b) {
            return a || b;
        },

        /**
         * 比较
         */
        lesser: function (a, b, opts) {
            if (a < b)
                return opts.fn(this);
            else
                return opts.inverse(this);
        },

        /**
         * 格式化日期+时间
         */
        format_datetime: function (value) {
            if (!value) {
                return '';
            }
            return moment(value).format('YYYY-MM-DD HH:mm:ss');
        },

        /**
         * 格式化日期
         */
        format_date: function (value) {
            if (!value) {
                return '';
            }
            return moment(value).format('YYYY-MM-DD');
        },

        /**
         * 格式化时间
         */
        format_time: function (value) {
            if (!value) {
                return '';
            }
            return moment(value).format('HH:mm');
        },

        /**
         * 数组或json值
         */
        av: function (arr, key) {
            return arr[key];
        },

        /**
         * 匿名订单号
         */
        anonymous_order: function (order) {
            if (!order) {
                return '';
            }
            return order.substr(0, 5) + '*******' + order.substr(12);
        }
    };
};